package model

import (
	"fmt"
	config2 "goblog/pkg/config"
	"goblog/pkg/logger"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"

	gormlogger "gorm.io/gorm/logger"
)

var DB *gorm.DB

// 初始化模型
func ConnectDB2() *gorm.DB {

	// 设置数据库连接信息

	// 构建 DSN 信息
	dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=%v&parseTime=True&multiStatements=true&loc=Local",
		config2.Get("database.mysql.username"),
		config2.Get("database.mysql.password"),
		config2.Get("database.mysql.host"),
		config2.Get("database.mysql.port"),
		config2.Get("database.mysql.database"),
		config2.Get("database.mysql.charset"),
	)

	// 初始化 Mysql 连接信息
	gormconfig := mysql.New(mysql.Config{
		DSN: dsn,
	})

	var level gormlogger.LogLevel
	if config2.GetBool("app.debug") {
		// 读取不到数据也会显示
		level = gormlogger.Info
	} else {
		// 只有错误才会显示
		level = gormlogger.Error
	}

	// 准备数据库连接
	DB, err := gorm.Open(gormconfig, &gorm.Config{
		/**
		Silent —— 静默模式，不打印任何信息
		Error —— 发生错误了才打印
		Warn —— 发生警告级别以上的错误才打印
		Info —— 打印所有信息，包括 SQL 语句
		*/
		Logger: gormlogger.Default.LogMode(level),
	})

	logger.LogError(err)

	return DB
}

// ConnectDB 初始化模型
func ConnectDB() *gorm.DB {

	var err error

	//root:root@tcp(127.0.0.1:3306)/goblog_v2?charset=utf8mb4&parseTime=True&loc=Local
	//root:root@tcp(127.0.0.1:3306)/goblog_v2?charset=utf8mb4&parseTime=True&loc=Local

	user := config2.GetString("database.mysql.username")
	pwd := config2.GetString("database.mysql.password")
	host := config2.GetString("database.mysql.host")
	port := config2.GetString("database.mysql.port")
	database := config2.GetString("database.mysql.database")
	charset := config2.GetString("database.mysql.charset")
	config := mysql.New(mysql.Config{
		DSN: user + ":" + pwd + "@tcp(" + host + ":" + port + ")/" + database + "?charset=" + charset + "&parseTime=True&loc=Local",
	})

	// 准备数据库连接池
	DB, err = gorm.Open(config, &gorm.Config{
		/**
		Silent —— 静默模式，不打印任何信息
		Error —— 发生错误了才打印
		Warn —— 发生警告级别以上的错误才打印
		Info —— 打印所有信息，包括 SQL 语句
		*/
		Logger: gormlogger.Default.LogMode(gormlogger.Info),
	})

	logger.LogError(err)

	return DB
}
